#pragma once

#include "IXButton.h"
#include "IXMenuPre.h"

/**
 *  IXMenuButton Interface.
 *
 */

class ExportXSkinLib IXMenuButton : public IXButton
{
    DEF_INTERFACE(IXMenuButton, _T("{17A45FD0-E7EB-4f7c-94D3-9BA322262D81}"));

public:
    virtual BOOL STDMETHODCALLTYPE  put_ArrowImage(IN LPCTSTR szXNC, IN int nSubImageCount, IN int nArrowWidth) = 0;

    virtual BOOL STDMETHODCALLTYPE  put_Menu(IN IXMenuPre* pMenuPre, int nSubMenuIndex) = 0;

    virtual BOOL STDMETHODCALLTYPE  put_MenuId(IN int nMenuId, int nSubMenuIndex) = 0;
    virtual BOOL STDMETHODCALLTYPE  put_MenuName(IN LPCTSTR lpMenuName, int nSubMenuIndex) = 0;

    virtual BOOL STDMETHODCALLTYPE  put_MenuIdEx(IN int nMenuId, int nSubMenuIndex, IN HINSTANCE hInstance) = 0;
    virtual BOOL STDMETHODCALLTYPE  put_MenuNameEx(IN LPCTSTR lpMenuName, int nSubMenuIndex, IN HINSTANCE hInstance) = 0;

    virtual BOOL STDMETHODCALLTYPE  get_Menu(OUT IXMenuPre** ppMenuPre) = 0;
};

// lParam: Menu Id
#define MenuButtonEvent_Selected _T("EvtMenuBtnSelected")

// lParam: IXMenuPre*, Dont' invoke Release of this pointer.
#define MenuButtonEvent_InitMenuPre _T("EvtMenuBtnInitPre")